package modelo;

import java.sql.*;
import java.util.*;

public class Datos {
	private static Datos instancia = null;
	private CategoriaDAO categorias = null;
	private ProductoDAO productos = null;
	private DetalleProductoDAO det_productos = null;
	private OrdenDAO ordenes = null;
	private DetalleOrdenDAO det_ordenes = null;
	private CompraDAO compras = null;
	private IngredienteDAO ingredientes = null;
	
	private Datos() {
		categorias = new CategoriaDAO();
		productos = new ProductoDAO();
		ingredientes = new IngredienteDAO();
		det_productos = new DetalleProductoDAO();
		det_ordenes = new DetalleOrdenDAO();
		ordenes = new OrdenDAO();
		compras = new CompraDAO();
	}
	
	public static Datos getInstancia() {
		if (instancia == null) instancia = new Datos();
		return instancia;
	}

	public void cargar() {
		categorias.cargar();
		productos.cargar();
		ingredientes.cargar();
		ordenes.cargar();
		compras.cargar();
		det_productos.cargar();
		det_ordenes.cargar();
	}
	
	public CategoriaDAO getCategorias() {
		return categorias;
	}

	public ProductoDAO getProductos() {
		return productos;
	}

	public IngredienteDAO getIngredientes() {
		return ingredientes;
	}

	public DetalleProductoDAO getDetallesProducto() {
		return det_productos;
	}

	public DetalleOrdenDAO getDetallesOrden() {
		return det_ordenes;
	}

	public CompraDAO getCompras() {
		return compras;
	}

	public OrdenDAO getOrdenes() {
		return ordenes;
	}
	
	public <T> ArrayList<T> leerBaseDatos(String tabla, CreadorDato<T> cre) {
		ArrayList<T> datos = new ArrayList<T>();
		
		String cadena = "SELECT * FROM " + tabla;
		
		ResultSet rs = Conexion.consultar(cadena);
		
		try {
			while (rs.next()) datos.add(cre.crear(rs));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return datos;
	}
}
